package cn.distribution.personManager.mapper;

import cn.distribution.personManager.entity.dao.PersonManagerDAO;
import cn.distribution.personManager.entity.vo.PersonExportVO;
import cn.distribution.personManager.entity.vo.PersonManagerVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 群组数据类
 * @author xiayujia
 */
@Mapper
public interface PersonManagerMapper extends BaseMapper<PersonManagerDAO>{

    /**
     * 通过群号用户身份得到用户id
     * @author zhengminjie
     * @param groupNum 群号
     * @param userIdentity 用户身份
     * @return 列表
     */
    List<Long> getUserIdByNum(@Param("groupNum") Long groupNum, @Param("userIdentity") String userIdentity);

    /**
     * 得到成员个数
     * @author zhengminjie
     * @return 个数
     */
    Integer countNumber();
    /**
     * 通过群id得到群号
     * @author xiayujia
     * @param groupId 群id
     * @return Long
     */
    Long getNumById(@Param("groupId") Long groupId);

    /**
     * 通过群id用户名得到用户id
     * @author xiayujia
     * @param groupId id
     * @param userName 用户名
     * @return 列表
     */
    Long getUserIdByIdName(@Param("groupId") Long groupId, @Param("userName") String userName);

    /**
     * 通过群id用户id得到所有信息
     * @author zhengminjie
     * @param groupId 群id
     * @param userId 用户id
     * @return 列表
     */
    PersonManagerVO getAllById(@Param("groupId") Long groupId, @Param("userId") Long userId);

    /**
     * 通过群id用户在群内昵称得到用户id
     * @author xiayujia
     * @param groupId id
     * @param groupUserName 用户在群内的昵称
     * @return 列表
     */
    Long getUserIdByIdGroupName(@Param("groupId") Long groupId, @Param("groupUserName") String groupUserName);

    /**
     * 通过群号和用户id得到用户身份
     * @author zhengminjie
     * @param groupNum 群号
     * @param userId 用户id
     * @return String
     */
    String getIdentityByNum(@Param("groupNum") Long groupNum,@Param("userId") Long userId);

    /**
     * 通过群id和用户id得到列表
     * @Param groupId 群ID
     * @param userId 用户ID
     * @param userIdentity 用户身份
     * @return 列表
     * */
    List<PersonManagerVO> getListById(@Param("groupId") Long groupId, @Param("userId") Long userId,@Param("userIdentity") String userIdentity);

    /**
     * 通过群id得到成员列表
     * @Param groupId 群ID
     * @param userId 用户ID
     * @param userIdentity 用户身份
     * @return 列表
     * */
    List<PersonManagerVO> searchMember(@Param("groupId") Long groupId, @Param("userId") Long userId,@Param("userIdentity") String userIdentity);

    /**
     * 通过群号删除所有和这个群有关的
     * @author zhengminjie
     * @param groupNum 群号
     * @return Long
     */
    Long deleteAllGroup(@Param("groupNum") Long groupNum);

    /**
     * 通过群号和用户id删除某项
     * @author zhengminjie
     * @param groupNum 群号
     * @param userId 用户id
     * @return
     */
    Long deleteGroup(@Param("groupNum") Long groupNum,@Param("userId") Long userId);

    /**
     * 通过群号和用户id删除群组某成员
     * @author xiayujia
     * @param groupId 群id
     * @param userId 用户id
     * @return
     */
    Long deleteMember(@Param("groupId")Long groupId, @Param("userId") Long userId);

    /**
     * 通过群id和用户编号查看是否有数据
     * @author zhengminjie
     * @param personManagerDAO 成员
     * @return 个数
     */
    Long getIfSame(PersonManagerDAO personManagerDAO);

    /**
     * 通过群id和用户id查看是否有数据
     * @author zhengminjie
     * @param groupId 群id
     * @param userId 用户id
     * @return 个数
     */
    Long getIfExist(@Param("groupId") Long groupId, @Param("userId") Long userId);

    /**
     * 通过群id和用户id更新表
     * @author zhengminjie
     * @param personManagerDAO 成员
     * @return long
     */
    Long updateNumber(PersonManagerDAO personManagerDAO);

    /**
     * 导出名单
     * @param groupId 群id
     * @return 导出名单
     */
    List<PersonExportVO> exportMember(@Param("groupId") Long groupId);

    /**
     * 通过群id和用户id更新群用户身份权限
     * @author xiayujia
     * @param groupId 群id
     * @param userId 用户id
     * @param userIdentity 用户身份
     * @param dataDistribution 用户分发权限
     * @return long
     */
    Long updateIdentiDistri(@Param("groupId")Long groupId, @Param("userId") Long userId,@Param("userIdentity") String userIdentity,@Param("dataDistribution") Boolean dataDistribution);

    /**
     * 通过群id和用户id更新群用户群昵称用户身份编号
     * @author xiayujia
     * @param groupId 群id
     * @param userId 用户id
     * @param groupUserName 用户群昵称
     * @param userNumber 用户身份编号
     * @return long
     */
    Long updateInfo(@Param("groupId")Long groupId, @Param("userId") Long userId,@Param("groupUserName") String groupUserName,@Param("userNumber") Long userNumber);

}
